// server_writer.go
//
// 功能：简单回显服务器，用于验证客户端 SafeWriter 的并发写保护效果。
// 逻辑：读取客户端每一行文本，增加时间戳后回写给客户端。
// 说明：服务器侧不刻意加锁，重点在客户端的写入序列化。

package main

import (
	"bufio"
	"fmt"
	"log"
	"net"
	"time"
)

const writerServerAddr = "127.0.0.1:8100"

func main() {
	listener, err := net.Listen("tcp", writerServerAddr)
	if err != nil {
		log.Fatalf("服务器监听失败: %v", err)
	}
	defer listener.Close()
	log.Printf("[writer-server] 监听地址 %s", writerServerAddr)

	for {
		conn, err := listener.Accept()
		if err != nil {
			log.Printf("接受连接失败: %v", err)
			continue
		}
		log.Printf("[writer-server] 新连接 remote=%s", conn.RemoteAddr())

		go handleConn(conn)
	}
}

func handleConn(conn net.Conn) {
	defer func() {
		log.Printf("[writer-server] 连接关闭 remote=%s", conn.RemoteAddr())
		conn.Close()
	}()

	reader := bufio.NewScanner(conn)
	for reader.Scan() {
		line := reader.Text()
		log.Printf("[writer-server] 收到: %q", line)

		resp := fmt.Sprintf("服务器回显: %s @ %s\n",
			line, time.Now().Format(time.RFC3339Nano))
		if _, err := conn.Write([]byte(resp)); err != nil {
			log.Printf("写回客户端失败: %v", err)
			return
		}
	}
	if err := reader.Err(); err != nil {
		log.Printf("读取出错: %v", err)
	}
}
